ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース7.0
E05167-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

レッスン5: データ・ストアでの処理

レッスン5A: 挿入(INSERT)

作成したデータ・ストアで処理を行うことができます。データベースと同様に、SQL文を実行して表に行を挿入できます。たとえば、新しい顧客をデータ・ストアに追加する必要があるとします。追加する最初の新しい顧客はJosephine Rogersです。INSERT文およびVALUES句を使用して、彼女の情報をcustomer表に追加します。

INSERT文を使用して、データ・ストアに行を追加できます。INSERT文とともにVALUES句を使用して、必要な情報を列に移入します。

新しい顧客情報を含む行をデータ・ストアに挿入するには、ttIsqlプロンプトで次のSQL文を実行します。

INSERT INTO customer

VALUES (1365,'Josephine','Rogers','2100 Augustine Drive, Santa Clara, CA 95054');

データ値は、レッスン3のCREATE TABLE文で指定した列名の順序(最初が顧客番号、2番目が名など)どおりに入力する必要があります。文字列値は単一引用符で囲む必要があります。

Customer表に挿入した新しい行を表示するには、次のSQL文を実行します。

SELECT * FROM customer WHERE cust_number=1365;

次の顧客を追加する場合は、行ごとに個別のINSERT文を使用します。

cust_
number
first_
name
last_
name
address
3750
Michelle
Ioni
12 Kipling Street, Denver, CO 80215
3836
Dante
Cremona
202 Tampa Way, Fremont, CA 94539
3945
Mark
Edwards
1 Market Street, San Francisco, CA 94126

データ・ストアに挿入した行を表示するには、次のSELECT文を実行します。

SELECT * FROM customer WHERE cust_number>=3750;

このSELECT文は次の結果を戻します。

< 3864,  Ruth,     Silver,  88 West 65th Street,  New York,      NY 10009 >

< 3750,  Michelle, Ioni,    12 Kipling Street,    Denver,        CO 80215 >

< 3836,  Dante,    Cremona, 202 Tampa Way,        Fremont,       CA 94539 >

< 3945,  Mark,     Edwards, 1 Market Street,      San Francisco, CA 94126 >

レッスン5B: 選択(SELECT)

レッスン4で表にデータを移入した際に、orders表で一部の顧客番号および注文番号が繰り返されていました。繰り返された注文番号の合計金額を求めるSELECT文を作成できます。また、レポートを読みやすくするために、結果をソートする句を使用することもできます。

数式で値の合計を求める集計関数SUMを使用して、繰り返された注文番号の金額を加算します。WHERE句で結合(JOIN)を使用して3つの表の情報をリンクします。WHERE句は個々の行を修飾しますが、GROUP BY句は共通の行をグループ化します。また、ORDER BY句は、結果をより読みやすくします。この句を使用すると、SELECTリスト内の任意の列のセットでソートできます。この例では、4は注文日、1は姓、2は名です。

顧客の注文の合計金額を日付別に求めるには、次のSELECT文を実行します。

SELECT last_name, first_name, SUM (price),order_date

FROM customer c, ref_products r, orders o

WHERE c.cust_number=o.cust_number and r.prod_number=o.prod_number

GROUP BY last_name, first_name, order_date

ORDER BY 4,1,2;

問合せの結果は次のとおりです。

< Aziz      , Abdul    , 475.94, 1996-01-03 >

< Anderson  , Mary      , 23.95,  1996-03-01 >

< Anderson  , Mary      , 5.99,   1996-03-08 >

< Burchard  , Peter     , 23.95,  1996-04-05 >

< Haas      , Kerri     , 5.99,   1996-05-02 >

< Garcia    , Linda     , 6.50,   1996-07-22 >

< Burchard  , Peter     , 135.00, 1997-01-12 >

< Dawes     , Juanita   , 12.95,  1997-02-05 >

< Stewart   , Cynthia   , 5.99,   1997-04-07 >

< McKenzie  , Katherine , 24.95,  1997-06-24 >

< Mendoza   , Saul      , 55.00,  1997-08-01 >

< Garcia    , Linda     , 24.95,  1997-08-30 >

< Johnson   , Karen     , 80.94,  1997-08-30 >

< Mudunuri  , Gautam    , 50.00,  1997-12-01 >

< McKenzie  , Katherine , 5.99,   1997-12-05 >

< Mendoza   , Saul      , 16.95,  1998-02-02 >

< Lao       , Sandra    , 24.00,  1998-02-12 >

< McKenzie  , Katherine , 135.00, 1998-03-13 >

< Stewart   , Cynthia   , 50.00,  1998-04-14 >

< Levesque  , Patricia  , 26.95,  1998-05-07 >

< Mueller   , Marco     , 50.00,  1998-05-07 >

< Borba     , Fatima    , 23.95,  1998-06-06 >

< Silva     , John      , 23.95,  1998-06-28 >

< Bianchi   , Anthony   , 5.99,   1998-08-08 >

< Behr      , Mary      , 395.00, 1998-08-22 >

< Rossi     , Paula     , 12.95,  1998-08-22 >

< Singh     , David     , 6.50,   1998-08-30 >

< Silver    , Ruth      , 5.99,   1998-09-20 >

< Mendoza   , Saul      , 375.00, 1998-10-25 >

< McKenzie  , Katherine , 375.00, 1998-11-11 >

< Rossi     , Paula     , 23.95,  1999-03-01 >

< Tu        , Paul      , 29.95,  1999-04-15 >

< Smith     , Bo        , 26.95,  1999-06-17 >

< Popov     , Pavel     , 5.99,   1999-10-15 >

< McPhee    , Steven    , 450.99, 1999-11-25 >

< McPhee    , Steven    , 135.00, 1999-12-07 >

レッスン5C: 更新(UPDATE)

INSERTは表に新しい行を追加しますが、UPDATEは既存の行を変更します。UPDATEを使用して、単一行、行のグループ、または表内のすべての行の値を変更します。

UPDATEでは、変更する行(複数可)を指定します。たとえば、$50.00以上の価格の参照製品を10%値引きするとします。最初にSELECTを実行して、価格が$50.00以上の製品を表示します。

コマンド・プロンプトで次の文を実行します。

SELECT * FROM ref_products

WHERE price >= 50.00;

次のリストが戻されます。

< 0789435578, Dk Illustrated Oxford Dictionary,                          50.00 >

< 0003750299, Collins Cobuild English Dictionary,                        55.00 >

< 0395448956, The American Heritage Dictionary of the English Language,  50.00 >

< 0198612710, The New Shorter Oxford English Dictionary (2 Vol.),       135.00 >

< 0198612583, The Compact Oxford English Dictionary,                    375.00 >

< 0198612605, Oxford English Dictionary: CD-Rom for Windows(20Vol./1CD),395.00 >

UPDATEに続くSET句で、列および変更値を指定します。前述の6つの製品の価格を10%値引きするには、価格に値.90を掛けます。

コマンド・プロンプトで次の文を実行します。

UPDATE ref_products

SET price = price * .90

WHERE price >= 50.00;

次のメッセージが戻されます。

6 rows updated

新しい価格を表示するには、コマンド・プロンプトで次の文を実行します。

SELECT * FROM ref_products

WHERE price >= 45.00;

次のリストが戻されます。

< 0789435578, Dk Illustrated Oxford Dictionary, 45.00 >

< 0003750299, Collins Cobuild English Dictionary, 49.50 >

< 0395448956, The American Heritage Dictionary of the English Language, 45.00 >

< 0198612710, The New Shorter Oxford English Dictionary (2 Vol.), 121.50 >

< 0198612583, The Compact Oxford English Dictionary, 337.50 >

< 0198612605, Oxford English Dictionary: CD-Rom for Windows (20 Vol./1 CD), 355. 50 >

レッスン5D: 削除(DELETE)

行を削除できることは、行の追加または変更を行うことができることと同様に重要です。INSERTおよびUPDATEと同様に、DELETEも単一行および複数行の操作に対して有効です。

たとえば、顧客のSteven McPheeから1999年11月の注文を取り消す連絡があったとします。McPhee氏の顧客番号は1001です。

Steven Mcpheeの注文を表示するには、コマンド・プロンプトで次の文を実行します。

SELECT * FROM orders

WHERE cust_number = 1001;

次のリストが戻されます。

< 6854765, 1001, 0198612605, 1999-11-25 >

< 6854765, 1001, 0789435578, 1999-11-25 >

< 6854765, 1001, 0877799113, 1999-11-25 >

< 6854770, 1001, 0198612710, 1999-12-07 >

McPhee氏の注文は2つあります。注文番号6854765は1999年11月の注文であるため、これがorders表から削除する注文になります。

注文番号6854765を削除するには、コマンド・プロンプトで次の文を実行します。

DELETE from orders

WHERE order_number = 6854765;

次のメッセージが戻されます。

(3 rows affected)

Steven McPheeの現在の注文を表示するには、コマンド・プロンプトで次の文を実行します。

SELECT * FROM orders

WHERE cust_number = 1001;

次の注文が戻されます。

< 6854770, 1001, 0198612710, 1999-12-07 >

SELECT文は、Steven McPheeの注文が1つだけあることを示しています。

これで個別の注文が削除されたため、データ・ストアを更新し、1997年より前のレコードを削除することができます。まず、次のSELECT文を実行して、該当する注文を検出する必要があります

SELECT * FROM orders

WHERE order_date <= '1996-12-31';

次の注文が戻されます。

< 6853036, 3700, 0028616731, 1996-04-05 >

< 6854100, 2655, 0440218616, 1996-07-22 >

< 6855031, 2826, 0028616731, 1996-03-01 >

< 6855036, 2826, 0877799113, 1996-03-08 >

< 6855297, 1224, 0877799113, 1996-01-03 >

< 6855297, 1224, 0877797099, 1996-01-03 >

< 6855297, 1224, 0789435578, 1996-01-03 >

< 6855297, 1224, 0198612605, 1996-01-03 >

< 6856095, 1133, 0877799113, 1996-05-02 >

このように、1997年より前の注文は9つあります。これらの注文を削除する必要があります。

CREATE VIEW文では、前述の問合せで使用したWHERE句と同じWHERE句を使用します。1997年1月より前の注文を削除するには、コマンド・プロンプトで次の文を実行します

DELETE FROM orders

WHERE order_date <= '1996-12-31';

次のメッセージが戻されます。

9 rows deleted

データ・ストアから9つの注文が削除されました。

これでデータ・ストアが更新されたため、バックアップを実行できます。バックアップでは、リストアに備えてデータ・ストアのスナップショットが作成されます。データ・ストアでの処理の詳細は、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』、『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』および『Oracle TimesTen In-Memory Database Java開発者およびリファレンス・ガイド』を参照してください。